package com.wb.mas.data.source;

import com.wb.mas.entity.ApproveResponse;
import com.wb.mas.entity.AuthBackResponse;
import com.wb.mas.entity.BackStatusResponse;
import com.wb.mas.entity.BankResponse;
import com.wb.mas.entity.BannerResponse;
import com.wb.mas.entity.CalculateRateResponse;
import com.wb.mas.entity.DeferInfoResponse;
import com.wb.mas.entity.DicInfoResponse;
import com.wb.mas.entity.FaceCompareResponse;
import com.wb.mas.entity.HelpResponse;
import com.wb.mas.entity.IdentityInfoResponse;
import com.wb.mas.entity.LoginResponse;
import com.wb.mas.entity.LoginTypeResponse;
import com.wb.mas.entity.OrderDetailResponse;
import com.wb.mas.entity.OrderListResponse;
import com.wb.mas.entity.OrderPageResponse;
import com.wb.mas.entity.OrderResponse;
import com.wb.mas.entity.PayCodeResponse;
import com.wb.mas.entity.ProDetailResponse;
import com.wb.mas.entity.RemindInfoResponse;
import com.wb.mas.entity.RootApiBean;
import com.wb.mas.entity.SubmitedAuthResponse;
import com.wb.mas.entity.UploadImageResponse;
import com.wb.mas.entity.VersionResponse;

import java.io.File;
import java.util.Map;

import io.reactivex.Observable;

/**
 * Created by goldze on 2019/3/26.
 */
public interface HttpDataSource {

    /**
     * 4.	facebook 登录的
     *
     * @param params
     * @return
     */
    Observable<LoginResponse> login(Map<String, Object> params);

    /**
     * 5、首页轮播图
     *
     * @param params
     * @return
     */
    Observable<BannerResponse> getBanner(Map<String, Object> params);

    /**
     * 6、首页轮播图
     *
     * @param params
     * @return
     */
    Observable<ProDetailResponse> getProdDeailList(Map<String, Object> params);

    /**
     * 7.	计算产品费率的
     *
     * @param params
     * @return
     */
    Observable<CalculateRateResponse> calculateRate(Map<String, Object> params);


    /**
     * 8.	检查提单资格（提单时先判断）
     * URL（先判断提单资格 再判断是否认证 最后提单）
     *
     * @param params
     * @return
     */
    Observable<RootApiBean> checkOrderQualifications(Map<String, Object> params);

    /**
     * 9.	获取认证状态的
     *
     * @param params
     * @return
     */
    Observable<ApproveResponse> getApproveStatus(Map<String, Object> params);

    /**
     * 10.	提单接口
     *
     * @param params
     * @return
     */
    Observable<RootApiBean> createOrder(Map<String, Object> params);

    /**
     * 11.	上传通讯录信息
     *
     * @param params
     * @return
     */
    Observable<RootApiBean> uploadPhone(Map<String, Object> params, File file);

    /**
     * 12.	上传经纬度（提单成功之后）
     *
     * @param params
     * @return
     */
    Observable<RootApiBean> saveLngLat(Map<String, Object> params);

    /**
     * 13.	上传图片
     *
     * @param params
     * @return
     */
    Observable<UploadImageResponse> uploadImage(Map<String, Object> params, File file);

    /**
     * 14.	身份认证界面2张图片对比
     *
     * @param params
     * @return
     */
    Observable<FaceCompareResponse> faceCompare(Map<String, Object> params);

    /**
     * 15.	保存或修改用户身份认证信息的
     *
     * @param params
     * @return
     */
    Observable<RootApiBean> updateOrSaveUser(Map<String, Object> params);

    /**
     * 16. 获取字典
     *
     * @param params
     * @return
     */
    Observable<DicInfoResponse> getDicInfo(Map<String, Object> params);

    /**
     * 17.	工作信息、借款需求、个人信息认证 保存修改的信息
     *
     * @param params
     * @return
     */
    Observable<RootApiBean> saveOrUpdateCustomerInfo(Map<String, Object> params);

    /**
     * 18.	联系人认证信息的保存和修改
     *
     * @param params
     * @return
     */
    Observable<RootApiBean> saveOrUpdateContactsInfo(Map<String, Object> params);

    /**
     * 19.	获取用户信息的接口
     *
     * @param params
     * @return
     */
    Observable<IdentityInfoResponse> getIdentityInfo(Map<String, Object> params);

    /**
     * 20.	银行卡认证的保存提交接口
     *
     * @param params
     * @return
     */
    Observable<RootApiBean> saveOrUpdateBankList(Map<String, Object> params);

    /**
     * 21.	图片补充信息的接口
     *
     * @param params
     * @return
     */
    Observable<RootApiBean> imageInformation(Map<String, Object> params);

    /**
     * 22.	根据状态获取订单
     *
     * @param params
     * @return
     */
    Observable<OrderResponse> getOrderInfoList(Map<String, Object> params);

    /**
     * 23.	根据状态获取订单
     *
     * @param params
     * @return
     */
    Observable<OrderPageResponse> getOrderInfoPage(Map<String, Object> params);

    /**
     * 24.	银行卡认证的信息的
     *
     * @param params
     * @return
     */
    Observable<BankResponse> getBankDetail(Map<String, Object> params);

    /**
     * 25.	获取还款码的接口
     *
     * @param params
     * @return
     */
    Observable<PayCodeResponse> getPayCode(Map<String, Object> params);

    /**
     * 26.	是否可以展期的接口
     *
     * @param params
     * @return
     */
    Observable<RootApiBean> rolloverApp(Map<String, Object> params);

    /**
     * 27.	获取展期信息的接口
     *
     * @param params
     * @return
     */
    Observable<DeferInfoResponse> getDeferInfo(Map<String, Object> params);

    /**
     * 28.	展期还款码的接口
     *
     * @param params
     * @return
     */
    Observable<PayCodeResponse> getDeferPayCode(Map<String, Object> params);

    /**
     * 29.	获取用户资料退回状态
     *
     * @param params
     * @return
     */
    Observable<BackStatusResponse> getBackStatus(Map<String, Object> params);

    /**
     * 31.	获取帮助中心数据
     *
     * @param params
     * @return
     */
    Observable<HelpResponse> getHelpDatas(Map<String, Object> params);


    /**
     * 32.用户名密码登录
     *
     * @param params
     * @return
     */
    Observable<LoginResponse> loginByUserNameAndPassword(Map<String, Object> params);


    /**
     * 32.资料回退时获取认证信息的
     *
     * @param params
     * @return
     */
    Observable<SubmitedAuthResponse> getSubmitedAuthInfo(Map<String, Object> params);


    /**
     * @param params
     * @return
     */
    Observable<OrderListResponse> getOrderPageList(Map<String, Object> params);


    /**
     * 订单详情
     *
     * @param params
     * @return
     */
    Observable<OrderDetailResponse> getOrderDetail(Map<String, Object> params);


    /**
     * 获取短信验证码
     *
     * @param params
     * @return
     */
    Observable<RootApiBean> getSmsCode(Map<String, Object> params);


    /**
     * 使用手机号登录
     *
     * @param params
     * @return
     */
    Observable<LoginResponse> loginByPhoneCode(Map<String, Object> params);


    /**
     * 34.判断登陆方式接口
     *
     * @param params
     * @return
     */
    Observable<LoginTypeResponse> getLoginType(Map<String, Object> params);
    /** 35
     *
     * @param params
     * @return
     */
    Observable<AuthBackResponse> getSubmitedBankInfo(Map<String, Object> params);

    /** 32
     *
     * @param params
     * @return
     */
    Observable<RemindInfoResponse> getRemindInfo(Map<String, Object> params);

}
